home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / hobbes3 / palette.asm < prev    next >
Assembly Source File  |  1992-08-20  |  5KB  |  210 lines

  1. include hobbes.inc
  2. include extrn.inc
  3.  
  4.  
  5. .CODE
  6.  
  7. ;----------------------------------------------------------------------------
  8. ; void Set1Palette( int entry,
  9. ;                   char red_level, char green_level, char blue_level )
  10. ;
  11.  
  12.         public  _Set1Palette
  13. _Set1Palette proc
  14. ARG    ENTRY:WORD, R_LVL:BYTE, G_LVL:BYTE, B_LVL:BYTE
  15.         push    bp
  16.         mov     bp,sp
  17.         push    ds
  18.         mov        ax,@data
  19.         mov        ds,ax
  20. ;        mov     dx,03dah
  21. ;pal1_retr1:
  22. ;        in      al,dx           ; wait for scan to reach top of screen
  23. ;        test    al,8
  24. ;        jnz     pal1_retr1
  25. ;pal1_retr2:
  26. ;        in      al,dx           ; wait for scan to reach bottom of screen
  27. ;        test    al,8
  28. ;        jz      pal1_retr2
  29.  
  30.         mov     dx,03c8h                ; set up for a blitz-write
  31.         mov     ax,ENTRY                ; from this register
  32.     cli                ; critical section:  no ints
  33.     out    dx,al            ; starting register
  34.     inc    dx            ; set up to update colors
  35.         mov     al,R_LVL
  36.         out     dx,al
  37.         mov     al,G_LVL
  38.         out     dx,al
  39.         mov     al,B_LVL
  40.         out     dx,al                   ; whap!  Zango!  They're updated!
  41.     sti                ; end of critical section
  42.         pop        ds
  43.         pop     bp
  44.         ret
  45. _Set1Palette  endp
  46.  
  47.  
  48.  
  49. ;----------------------------------------------------------------------------
  50. ; void Set256Palette( unsigned char palette[256][3] )
  51. ;
  52.         public  _Set256Palette
  53. _Set256Palette proc
  54. ARG    PSA:WORD
  55.         push    bp
  56.         mov     bp,sp
  57.         push    ds
  58.         push    si
  59.         mov     ds,word ptr (PSA + 2)
  60.         mov     si,PSA
  61.         mov     cx,768
  62.         mov     dx,03dah
  63. pal_retr1:
  64.         in      al,dx           ; wait for scan to reach top of screen
  65.         test    al,8
  66.         jnz     pal_retr1
  67. pal_retr2:
  68.         in      al,dx           ; wait for scan to reach bottom of screen
  69.         test    al,8
  70.         jz      pal_retr2
  71.  
  72.         mov     dx,03c8h                ; set up for a blitz-write
  73.         mov     ax,0                    ; from this register
  74.     cli                ; critical section:  no ints
  75.     out    dx,al        ; starting register
  76.     inc    dx            ; set up to update colors
  77.     rep    outsb        ; whap!  Zango!  They're updated!
  78.     sti                ; end of critical section
  79.  
  80.         pop     si
  81.         pop     ds
  82.         pop     bp
  83.         ret
  84. _Set256Palette  endp
  85.  
  86.  
  87. ;----------------------------------------------------------------------------
  88. ; void Get256Palette( unsigned char palette[256][3] )
  89. ;
  90.         public  _Get256Palette
  91. _Get256Palette proc
  92. ARG PSA:WORD
  93.         push    bp
  94.         mov     bp,sp
  95.         mov     es,word ptr (PSA + 2)   ; target palette segment
  96.         mov     dx,PSA                  ; target palette offset
  97.         mov     cx,0ffh                 ; get all 256 entries
  98.         mov     bx,0                    ; start with the first entry
  99.         mov     ax,1017h                ; read a block of dac registers
  100.         int     10h                     ; do it
  101.         pop     bp
  102.         ret
  103. _Get256Palette  endp
  104.  
  105.  
  106.  
  107. ;----------------------------------------------------------------------------
  108. ;
  109. ; VGA Palette fading code by Eirik Milch Pedersen <thaco@solan.unit.no>
  110. ; Only for 186 and better with VGA
  111. ;
  112. .186
  113. _VGA_fadeout proc C uses si di es ds, steps:WORD, pp1:DWORD, pp2:DWORD
  114. public _VGA_fadeout
  115.       mov     bx,steps
  116.  
  117. out_loop1:
  118.       mov     cx,768
  119.       les     di,pp1
  120.       lds     si,pp2
  121.       push     si
  122.  
  123. out_loop2:
  124.       xor     ah,ah
  125.       mov     al,[es:di]
  126. ;  shr al,1
  127. ;  shr al,1    ; normalize 8 bit RGB to 6 bits
  128.       mul     bx
  129.       div     steps
  130.       mov     [ds:si],al
  131.       inc     di
  132.       inc     si
  133.       loop     out_loop2
  134.  
  135.       mov     dx,3DAh
  136. retraceout_loop1:
  137.       in     al,dx
  138.       and     al,08h
  139.       jnz     retraceout_loop1
  140. retraceout_loop2:
  141.       in     al,dx
  142.       and     al,08h
  143.       jz     retraceout_loop2
  144.  
  145.       pop si
  146.  
  147.       mov     dx,3C8h
  148.       xor     al,al
  149.       out     dx,al
  150.       mov     cx,768
  151.       mov     dx,3C9h
  152.       cld
  153.       rep outsb
  154.  
  155.       dec     bx
  156.       jnl     out_loop1
  157.  
  158.       ret
  159. _VGA_fadeout endp
  160.  
  161.  
  162. ;----------------------------------------------------------------------------
  163.  
  164. _VGA_fadein proc c uses si di es ds, steps:WORD, pp1:DWORD, pp2:DWORD
  165. public _VGA_fadein
  166.       mov     bx,0
  167. in_loop1:
  168.       mov     cx,768
  169.       les     di,pp1
  170.       lds     si,pp2
  171.       push     si
  172.  
  173. in_loop2:
  174.       xor     ah,ah
  175.       mov     al,[es:di]
  176.       mul     bx
  177.       div     steps
  178.       mov     [ds:si],al
  179.       inc     di
  180.       inc     si
  181.       loop     in_loop2
  182.  
  183.       mov     dx,3DAh
  184. retracein_loop1:
  185.       in     al,dx
  186.       and     al,08h
  187.       jnz     retracein_loop1
  188. retracein_loop2:
  189.       in     al,dx
  190.       and     al,08h
  191.       jz     retracein_loop2
  192.  
  193.       pop     si
  194.  
  195.       mov     dx,3C8h
  196.       xor     al,al
  197.       out     dx,al
  198.       mov     cx,768
  199.       mov     dx,3C9h
  200.       cld
  201.       rep     outsb
  202.  
  203.       inc     bx
  204.       cmp     bx,steps
  205.       jng     in_loop1
  206.       ret
  207. _VGA_fadein endp
  208.  
  209. ;----------------------------------------------------------------------------
  210. END